//package com.yueyang.sojourn.server.controller.wx;
//
//import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
//import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
//import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult;
//import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
//import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
//import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
//import com.github.binarywang.wxpay.bean.result.*;
//import com.github.binarywang.wxpay.constant.WxPayConstants;
//import com.github.binarywang.wxpay.exception.WxPayException;
//import com.github.binarywang.wxpay.service.ProfitSharingService;
//import com.github.binarywang.wxpay.service.WxPayService;
//import com.yueyang.sojourn.server.common.LoginNeedless;
//import com.yueyang.sojourn.server.controller.BaseController;
//import com.yueyang.sojourn.server.controller.model.JsonResult;
//import com.yueyang.sojourn.server.utils.IpUtil;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation;
//import io.swagger.annotations.ApiParam;
//import org.apache.commons.io.IOUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestParam;
//
//import javax.servlet.http.HttpServletRequest;
//import java.io.IOException;
//import java.math.BigDecimal;
//
///**
// * @author Andy.yang
// * @version v1
// * @summary
// * @Copyright (c) 2019, yueyang Group All Rights Reserved.
// * @since 2020/3/6
// */
////@RestController
//@RequestMapping("/api/wx/orderTemp")
//@Api(tags = "(小程序)订单 API")
//public class ApiPayControllerTemp extends BaseController {
//    @Autowired
//    private WxPayService wxPayService;
//    @Autowired
//    private ProfitSharingService profitSharingService;
//
//    @ApiOperation(value = "微信支付预付定单")
//    @GetMapping("/prepay")
//    public JsonResult prepay(@ApiParam(value = "订单id") @RequestParam Long orderId, HttpServletRequest request) {
//        String openId = "o7S1I4xYpbj7jzAzjqwwH__z7GXs" ;
//        Long userId = getLoginUserId();
//
//        String orderSn = getSn(orderId.toString()) ;
//        BigDecimal price = new BigDecimal(0.01);
//        WxPayMpOrderResult result = null;
//        try {
//            WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
//            orderRequest.setOutTradeNo(orderSn);
//            orderRequest.setOpenid(openId);
//            orderRequest.setBody("订单：" + orderSn);
//            // 元转成分
//            int fee = 0;
//            BigDecimal actualPrice = price;
//            fee = actualPrice.multiply(new BigDecimal(100)).intValue();
//            orderRequest.setTotalFee(fee);
//            orderRequest.setSpbillCreateIp(IpUtil.getIpAddr(request));
//
//            result = wxPayService.createOrder(orderRequest);
//
//            //缓存prepayID用于后续模版通知
//            String prepayId = result.getPackageValue();
//            prepayId = prepayId.replace("prepay_id=", "");
//
//            JsonResult ok = new JsonResult(1,"预支付成功", true,result);
//            return ok;
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            return fail(-100, "订单不能支付");
//        }
//    }
//
//    /**
//     * 微信付款成功或失败回调接口
//     * <p>
//     *  TODO
//     *  注意，这里pay-notify是示例地址，建议开发者应该设立一个隐蔽的回调地址
//     *
//     * @param request 请求内容
//     * @return 操作结果
//     */
//    @LoginNeedless
//    @PostMapping("pay-notify")
//    public Object payNotify(HttpServletRequest request) {
//        String xmlResult = null;
//        try {
//            xmlResult = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding());
//        } catch (IOException e) {
//            e.printStackTrace();
//            return fail(e.getMessage());
//        }
//
//        WxPayOrderNotifyResult result = null;
//        try {
//            result = wxPayService.parseOrderNotifyResult(xmlResult);
//
//            if(!WxPayConstants.ResultCode.SUCCESS.equals(result.getResultCode())){
////                logger.error(xmlResult);
//                throw new WxPayException("微信通知支付失败！");
//            }
//            if(!WxPayConstants.ResultCode.SUCCESS.equals(result.getReturnCode())){
////                logger.error(xmlResult);
//                throw new WxPayException("微信通知支付失败！");
//            }
//        } catch (WxPayException e) {
//            e.printStackTrace();
//            return fail(e.getMessage());
//        }
//
////        logger.info("处理腾讯支付平台的订单支付");
////        logger.info(result);
//
//        String orderSn = result.getOutTradeNo();
//        String payId = result.getTransactionId();
//
//        // 分转化成元
//        String totalFee = BaseWxPayResult.fenToYuan(result.getTotalFee());
//        System.out.println("totalFee=" + totalFee);
//        return WxPayNotifyResponse.success("处理成功!");
//    }
//
//
//
//    @ApiOperation(value = "关闭wx订单")
//    @LoginNeedless
//    @GetMapping("/closeOrder")
//    public JsonResult closeOrder(@ApiParam(value = "订单id") @RequestParam Long orderId, HttpServletRequest request) {
//        String openId = "o7S1I4xYpbj7jzAzjqwwH__z7GXs";
//        try {
//            WxPayOrderCloseResult result = wxPayService.closeOrder(getSn(orderId.toString()));
//            JsonResult ok = ok();
//            ok.setData(result);
//            return ok;
//        } catch (WxPayException e) {
//            e.printStackTrace();
//            return fail(e.getMessage());
//        }
//    }
//
//    /**
//     * 微信退款成功或失败回调接口
//     * <p>
//     *  TODO
//     *  注意，这里pay-notify是示例地址，建议开发者应该设立一个隐蔽的回调地址
//     *
//     * @param request 请求内容
//     * @return 操作结果
//     */
//    @LoginNeedless
//    @PostMapping("refund-notify")
//    public Object refundNotify(HttpServletRequest request) {
//        String xmlResult = null;
//        try {
//            xmlResult = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding());
//        } catch (IOException e) {
//            e.printStackTrace();
//            return fail(e.getMessage());
//        }
//
//        WxPayRefundNotifyResult result = null;
//        try {
//            result = wxPayService.parseRefundNotifyResult(xmlResult);
//
//            if(!WxPayConstants.ResultCode.SUCCESS.equals(result.getResultCode())){
////                logger.error(xmlResult);
//                throw new WxPayException("微信通知退款失败！");
//            }
//            if(!WxPayConstants.ResultCode.SUCCESS.equals(result.getReturnCode())){
////                logger.error(xmlResult);
//                throw new WxPayException("微信通知退款失败！");
//            }
//        } catch (WxPayException e) {
//            e.printStackTrace();
//            return fail(e.getMessage());
//        }
//
////        logger.info("处理腾讯支付平台的订单支付");
////        logger.info(result);
//
//        String returnMsg = result.getReturnMsg();
//        return WxPayNotifyResponse.success("处理成功!");
//    }
//
//    @ApiOperation(value = "查询wx订单状态")
//    @LoginNeedless
//    @GetMapping("/queryWxOrder")
//    public JsonResult queryWxOrder(@ApiParam(value = "订单id") @RequestParam Long orderId, HttpServletRequest request) {
//        String openId = "o7S1I4xYpbj7jzAzjqwwH__z7GXs";
//        try {
//            WxPayOrderQueryResult result = wxPayService.queryOrder(null,getSn(orderId.toString()));
//            JsonResult ok = ok();
//            ok.setData(result);
//            return ok;
//        } catch (WxPayException e) {
//            e.printStackTrace();
//            return fail(e.getMessage());
//        }
//    }
//
//    @ApiOperation(value = "申请退款")
//    @LoginNeedless
//    @GetMapping("/refund")
//    public JsonResult refund(@ApiParam(value = "订单id") @RequestParam Long orderId, HttpServletRequest request) {
//        String openId = "o7S1I4xYpbj7jzAzjqwwH__z7GXs";
//        try {
//            WxPayRefundRequest wxRequest = WxPayRefundRequest.newBuilder().build();
//            wxRequest.setTotalFee(1);
//            wxRequest.setOutTradeNo(getSn(orderId.toString()));
//            wxRequest.setRefundFee(1);
//            wxRequest.setOutRefundNo("rf" + orderId.toString());
//            WxPayRefundResult result = wxPayService.refund(wxRequest);
//            JsonResult ok = ok();
//            ok.setData(result);
//            return ok;
//        } catch (WxPayException e) {
//            e.printStackTrace();
//            return fail(e.getMessage());
//        }
//    }
//
//    @ApiOperation(value = "查询退款")
//    @LoginNeedless
//    @GetMapping("/refundQuery")
//    public JsonResult refundQuery(@ApiParam(value = "订单id") @RequestParam Long orderId, HttpServletRequest request) {
//        String openId = "o7S1I4xYpbj7jzAzjqwwH__z7GXs";
//        try {
//            String myRfId = "rf" + orderId.toString();
//            WxPayRefundQueryResult result = wxPayService.refundQuery(null,null,myRfId,null);
//            JsonResult ok = ok();
//            ok.setData(result);
//            return ok;
//        } catch (WxPayException e) {
//            e.printStackTrace();
//            return fail(e.getMessage());
//        }
//    }
//
//    @ApiOperation(value = "下载对账单")
//    @LoginNeedless
//    @GetMapping("/downloadbill")
//    public JsonResult downloadbill(@ApiParam(value = "账单日期") @RequestParam String date, HttpServletRequest request) {
//        String openId = "o7S1I4xYpbj7jzAzjqwwH__z7GXs";
//        try {
//            WxPayBillResult result = wxPayService.downloadBill(date, WxPayConstants.BillType.ALL,null,null);
//            JsonResult ok = ok();
//            ok.setData(result);
//            return ok;
//        } catch (WxPayException e) {
//            e.printStackTrace();
//            return fail(e.getMessage());
//        }
//    }
//
//    @ApiOperation(value = "下载资金账单")
//    @LoginNeedless
//    @GetMapping("/downloadFundFlow")
//    public JsonResult downloadfundflow(@ApiParam(value = "账单日期") @RequestParam String date, HttpServletRequest request) {
//        String openId = "o7S1I4xYpbj7jzAzjqwwH__z7GXs";
//        try {
//            WxPayFundFlowResult result = wxPayService.downloadFundFlow(date, WxPayConstants.AccountType.BASIC,null);
//            JsonResult ok = ok();
//            ok.setData(result);
//            return ok;
//        } catch (WxPayException e) {
//            e.printStackTrace();
//            return fail(e.getMessage());
//        }
//    }
//
//
//
//
//    private String getSn(String orderId){
//        String orderSn = "sn" + orderId ;
//        return orderSn;
//    }
//
//
//
//
//
//
//    //-------------------------------- 分账
//
//}
